home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
edit
/
pt20pc.zip
/
LIBRARY.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-02-04
|
10KB
|
543 lines
#include "pt.h"
#include "conio.h"
extern union REGS rin, rout;
extern struct SREGS segRegs;
extern unsigned char msgBuffer[];
int pascal CommandToMenuNumber( command )
int command;
{
int ret;
switch( command ) {
default: ret = 0; break;
case FMENU1: ret = 1; break;
case FMENU2: ret = 2; break;
case FMENU3: ret = 3; break;
case FMENU4: ret = 4; break;
case FMENU5: ret = 5; break;
case FMENU6: ret = 6; break;
case FMENU7: ret = 7; break;
case FMENU8: ret = 8; break;
case FMENU9: ret = 9; break;
case FMENU10: ret = 10; break;
case FMENU11: ret = 11; break;
case FMENU12: ret = 12; break;
case FMENU13: ret = 13; break;
case FMENU14: ret = 14; break;
case FMENU15: ret = 15; break;
case FMENU16: ret = 16; break;
}
return ret;
}
int pascal
/* XTAG:FindMenuItem */
FindMenuItem( menuNumber, menuCol )
int menuNumber, menuCol;
{
extern struct menuBlock far *menus[];
int i, n, col1;
/* figure out which command it is */
n = menus[menuNumber]->nItems;
col1 = 0;
for(i = 1; i < (n-1); i++) {
col1 += farStrlen(menus[menuNumber]->cmdName[i]);
if( col1 > menuCol )
break;
}
return menus[menuNumber]->cmdNumber[i];
}
int pascal
/* XTAG:GetTime */
GetTime()
{
rin.h.ah = 0x2C;
intdos(&rin, &rout);
return (rout.h.dh * 100) + rout.h.dl;
}
int pascal
/* XTAG:farStrlen */
farStrlen(fp)
register unsigned char far *fp;
{
register int len;
len = 0;
while( *fp++ != '\0' )
++len;
return len;
}
unsigned char * pascal
/* XTAG:farString */
farString(fp)
unsigned char far *fp;
{
unsigned char *p;
static char buffer[120];
p = &buffer[0];
while( (*p++ = *fp++) != '\0' )
;
return &buffer[0];
}
void pascal
/* XTAG:waitForEvent */
waitForEvent()
{
extern struct event events[];
register unsigned char *p;
register int evhead;
while( 1 ) {
if( isKeystroke() ) {
(void)getKeystroke(p);
break;
}
if( isMouseEvent(0) ) {
evhead = getMouseEvent();
if( events[evhead].buttons != 0 )
break;
}
}
}
unsigned char pascal
/* XTAG:getDefaultDrive */
getDefaultDrive()
{
rin.h.ah = 0x19;
intdos(&rin, &rout);
return rout.h.al;
}
int pascal
/* XTAG:setDefaultDrive */
setDefaultDrive(driveNumber)
int driveNumber;
{
rin.h.ah = 0xE;
rin.h.dl = (char)driveNumber;
intdos(&rin, &rout);
/* return the number of physical drives */
return rout.h.al;
}
int pascal
/* XTAG:isKeystroke */
isKeystroke()
{
extern int macroState;
extern int macroIndex;
extern int macroSize;
if( macroState == 2 ) {
/* are there still characters in the macro? */
if ( macroIndex < macroSize )
return 1;
macroState = 0;
}
return kbhit();
}
unsigned char pascal
/* XTAG:getKeystroke */
getKeystroke(p)
unsigned char *p;
{
extern unsigned char textBuffer[];
extern int scrRows, scrCols;
extern int macroIndex;
extern int macroSize;
extern int macroState;
extern unsigned char macroText[];
extern int debug;
register unsigned char ch1, ch2;
/* are we playing back a macro? */
if( macroState == 2 ) {
if( macroIndex < macroSize ) {
ch2 = macroText[macroIndex++];
ch1 = macroText[macroIndex++];
*p = ch2;
return ch1;
}
macroState = 0;
}
/* else get one from the keyboard */
rin.h.ah = 0;
int86(0x16, &rin, &rout);
ch1 = rout.h.al;
ch2 = rout.h.ah;
if( macroState == 1 ) {
if( macroIndex < 100 ) {
macroText[macroIndex++] = ch2;
macroText[macroIndex++] = ch1;
} else {
macroState = 0;
macroSize = macroIndex;
msg("Macro overflow. Keystroke not recorded.", 3);
msg("", 0); /* erase the sticky message */
msg("End recording keystrokes", 1);
}
}
*p = ch2;
return ch1;
}
unsigned char pascal
/* XTAG:incon */
incon()
{
unsigned char dummy;
return getKeystroke(&dummy);
}
unsigned char pascal
/* XTAG:inconkb */
inconkb()
{
rin.h.ah = 0;
int86(0x16, &rin, &rout);
return (unsigned char)rout.h.al;
}
unsigned char pascal
/* XTAG:peekKeystroke */
peekKeystroke(scan)
unsigned char *scan;
{
extern int macroIndex;
extern int macroSize;
extern int macroState;
extern int debug;
extern unsigned char macroText[];
/* are we playing back a macro? */
if( macroState == 2 ) {
if( macroIndex < macroSize ) {
/* return the char (not the scan code) */
/* that will be read on the next getKeystroke */
return macroText[macroIndex+1];
}
/* else */
macroState = 0;
}
rin.h.ah = 1;
int86(0x16, &rin, &rout);
*scan = (unsigned char)rout.h.ah;
return (unsigned char)rout.h.al;
}
long pascal
/* XTAG:lseekls */
lseekls(handle, offset, method)
int handle, method;
long offset;
{
long l;
rin.h.ah = 0x42;
rin.h.al = (char)method;
rin.x.bx = handle;
rin.x.cx = (unsigned)(offset>>16);
rin.x.dx = (unsigned)offset;
intdos(&rin, &rout) & 0x1;
if( rout.x.cflag & 0x1 ) {
return (long)(-rout.x.ax);
} else {
l = (long)(unsigned)rout.x.dx;
l = (l<<16) + (long)(unsigned)rout.x.ax;
return l;
}
}
void pascal
/* XTAG:setvect */
setvect(vectorNumber, segment, offset)
int vectorNumber, segment, offset;
{
int saveDS;
rin.h.ah = 0x25;
rin.h.al = (char)vectorNumber;
rin.x.dx = offset;
saveDS = segRegs.ds;
segRegs.ds = segment;
intdosx(&rin, &rout, &segRegs);
segRegs.ds = saveDS;
}
void pascal
/* XTAG:flush */
flush()
{
unsigned char dummy;
while( 1 ) {
/* quit if there is no character waiting to be read */
if( !kbhit() )
break;
/* quit if the character waiting to be read is not a */
/* backspace*/
if( peekKeystroke(&dummy) != '\b')
break;
incon(); /* read and ignore the backspace */
}
}
void pascal
/* XTAG:scrollUp */
scrollUp(nLines, row1, col1, row2, col2, attr)
int nLines, row1, col1, row2, col2, attr;
{
rin.h.ah = 6; /* scroll up */
rin.h.al = (char)nLines;
rin.h.bh = (char)attr;
rin.h.bl = 0;
rin.h.ch = (char)row1;
rin.h.cl = (char)col1;
rin.h.dh = (char)row2;
rin.h.dl = (char)col2;
int86(0x10, &rin, &rout);
}
int pascal
/* XTAG:allmemls */
allmemls(size, maxPara)
unsigned int size;
int *maxPara;
{
rin.h.ah = 0x48;
rin.x.bx = (int)size;
intdos(&rin, &rout);
if( rout.x.cflag & 1 )
*maxPara = rout.x.bx;
else
*maxPara = -1;
return rout.x.ax;
}
int pascal
/* XTAG:freemem */
freemem(para)
int para;
{
register int ret;
int saveES;
if( para == 0 )
return 0;
rin.h.ah = 0x49;
saveES = segRegs.es;
segRegs.es = para;
intdosx(&rin, &rout, &segRegs);
if( rout.x.cflag & 1 )
ret = rout.x.ax;
else
ret = 0;
segRegs.es = saveES;
return ret;
}
int pascal
/* XTAG:renamels */
renamels(oldName, newName)
unsigned char *oldName, *newName;
{
rin.h.ah = 0x56;
rin.x.dx = (int)oldName;
rin.x.di = (int)newName;
intdosx(&rin, &rout, &segRegs);
if( rout.x.cflag & 1 )
return rout.x.ax;
else
return 0;
}
int pascal
/* XTAG:creatls */
creatls(name, attr)
unsigned char *name;
int attr;
{
rin.h.ah = 0x3C; /* create file */
rin.x.cx = attr;
rin.x.dx = (int)name;
intdos(&rin, &rout);
if( rout.x.cflag & 0x1 )
return -rout.x.ax;
else
return rout.x.ax;
}
int pascal
/* XTAG:openls */
openls(name, attr)
unsigned char *name;
int attr;
{
rin.h.ah = 0x3D; /* open file */
rin.h.al = (char)attr;
rin.x.dx = (int)name;
intdos(&rin, &rout);
if( rout.x.cflag & 0x1 )
return -rout.x.ax;
else
return rout.x.ax;
}
int pascal
/* XTAG:closels */
closels(handle)
int handle;
{
rin.h.ah = 0x3E;
rin.x.bx = handle;
intdos(&rin, &rout);
if( rout.x.cflag & 0x1 )
return rout.x.ax;
else
return 0;
}
int pascal
/* XTAG:readls */
readls(handle, buffer, nBytes)
int handle, nBytes;
unsigned char *buffer;
{
rin.h.ah = 0x3F;
rin.x.bx = handle;
rin.x.cx = nBytes;
rin.x.dx = (int)buffer;
intdos(&rin, &rout);
if( rout.x.cflag & 0x1 )
return -rout.x.ax;
else
return rout.x.ax;
}
int pascal
/* XTAG:readFar */
readFar(handle, buffer, nBytes)